import java.util.ArrayList;

/*
 * @lc app=leetcode.cn id=6 lang=java
 *
 * [6] Z 字形变换
 */

// @lc code=start
class Solution {
    public String convert(String s, int numRows) {
        // 有点像填词啊
        if(numRows == 1) return s;
        StringBuilder[] ans = new StringBuilder[numRows]; //开一个相应大小的数组
        for(int i=0 ;i<ans.length ;i++ ){
            ans[i] = new StringBuilder(numRows);
        }

        // 为什么下面这个写法不可以？
        // 难道是引用的问题？t实际上到底拿到的是一个指针还是一个原始值的复制？
        // 看了一下总结，t拿到的应该是一个复制，怪不得不行。因为New了之后原对象是没有New的。
        // for(StringBuilder t : ans){
        //     t = new StringBuilder(numRows/2);
        // }

        for(int i =0 , j=0 ,k=0; i<s.length();i++ ,j++){
            if( j % (numRows*2 - 2) == 0) j=0;//j每次迭代

            if(j<numRows){
                ans[j].append(s.charAt(i));
            }
            else if(j==numRows){//这时是斜线了
                k = numRows -2;//从这个位置开始反着填
                ans[k].append(s.charAt(i));
            }else{
                ans[--k].append(s.charAt(i));
            }
            
        }
        String final_ans = "";
        for(var t: ans){
            final_ans+=t.toString();
        }
        return final_ans;

    }
}
// @lc code=end

